5.3 Der OpenFileDialog
 
Dafür steht ein weiteres Steuerelement in der Toolbox am unteren Ende zur Verfügung: der »OpenFileDialog«. Er wird auf das Formular gezogen, wo er sich zunächst am unteren Rand platziert. Er trägt den Namen »OpenFileDialog1«. Er wird mit dem Befehl
OpenFileDialog.ShowDialog()
geöffnet. Der Start funktioniert - allerdings ist das Resultat nicht ganz das gewünschte (siehe Abbildung 5.3).
Abbildung 5.3
Der OpenFileDialog
Der Dialog zeigt irgendeinen Ordner und listet alle Dateien auf, ohne dass eine Vorauswahl getroffen werden kann. Dies kann durch Voreinstellen bestimmter Eigenschaften abgefangen werden:
With OpenFileDialog1
.Filter = _
"Excel-Mappen (*.xls)|*.xls|Alle Dateien (*.*)|*.*"
.FilterIndex = 1
.InitialDirectory = "D:\Data"
.Title = "Wir suchen eine Excel-Mappe"
.ShowDialog()
End With
Abbildung 5.4
Der verbesserte OpenFileDialog
Dazu einige Erläuterungen. Natürlich hätte ich auch schreiben können:
OpenFileDialog1.Filter = _
"Excel-Mappen (*.xls)|*.xls|Alle Dateien (*.*)|*.*"
OpenFileDialog1.FilterIndex = 1
OpenFileDialog1.InitialDirectory = "D:\Data"
OpenFileDialog1.Title = "Wir suchen eine Excel-Mappe"
...
Um die Schreibarbeit zu sparen und nicht jedes Mal das Objekt »OpenFileDialog« zu wiederholen, wird es in eine Klammer eingespannt, die mit
With
beginnt und mit
End With
endet.
Wird nun innerhalb der Klammer ein Punkt eingegeben, so »weiß« er, dass es sich auf das übergeordnete Objekt, das sich nach dem With befindet, beziehen muss. Am Anfang ist diese Schreibweise sicherlich gewöhnungsbedürftig, aber mit der Zeit erleichtert sie das Programmieren.
Zuerst wird die Eigenschaft »Filter« gesetzt. Sie besteht aus einer geraden Anzahl von Einträgen. Der erste Eintrag wird im Listenfeld gezeigt, während der zweite den eigentlichen Filter darstellt. Die Einträge werden durch das Pipe-Symbol (|) getrennt.
Damit der erste Eintrag vorab gewählt ist und schon in Kraft tritt, wird die Eigenschaft »FilterIndex« auf 1 gesetzt. Diese Eigenschaft ist überflüssig, da die Combobox sich den ersten Eintrag holen und ihn anzeigen würde.
Der Ordner, in dem er zu suchen beginnt, wird über die Eigenschaft »InitialDirectory« festgelegt. Sollte er nicht existieren, dann wählt »OpenFileDialog« einen anderen Ordner - er beginnt bei dem Ordner, in welchem das Programm installiert ist. Der »Title« ist Spielerei - gemeint ist die Beschriftung der Titelzeile.
Dann schließt sich die Frage an, wie abgefangen werden kann, was der Benutzer auswählt. Und: Ob er überhaupt etwas auswählt oder auf »Abbrechen« klickt. Dazu muss die letzte Zeile etwas modifiziert werden. Es wird nicht einfach nur der Dialog angezeigt (OpenFileDialog1.ShowDialog()), sondern es wird überprüft:
If .ShowDialog() = Windows.Forms.DialogResult.OK Then
strDatei = .FileName
Übrigens: Da nach der Zeile
Public Class
der Befehl folgt
Inherits System.Windows.Forms.Form
mit dem die Formular-Objektbibliothek eingebunden ist, genügt es, den Befehl
If .ShowDialog() = Windows.Forms.DialogResult.OK Then
zu verkürzen auf:
If .ShowDialog() = DialogResult.OK Then
Die Anweisung »DialogResult« kennt die zugehörige Objektbibliothek, sodass es nicht zu Konflikten kommt.
Allerdings soll der Benutzer so lange diesen Dialog sehen, bis er eine Datei auswählt. Dies könnte mit einer Schleife sichergestellt werden:
With OpenFileDialog1
Do
.Filter = _
"Excel-Mappen (*.xls)|*.xls|Alle Dateien (*.*)|*.*"
.FilterIndex = 1
.InitialDirectory = "D:\Data"
.Title = "Wir suchen eine Excel-Mappe"
Loop Until .ShowDialog() = DialogResult.OK
End With
Nun hat der Benutzer eine Datei ausgewählt und auf »OK« geklickt. Übrigens: Wenn er nichts auswählt und auf die Schaltfläche »OK« klickt, dann bringt »OpenFileDialog« eine Fehlermeldung. Versucht der Benutzer diesen Dialog mit dem Schließen-Symbol (x) zu beenden, dann wird ebenso der Wert »DialogResult.Cancel« übergeben und er bleibt in der Schleife.
Die nun ausgewählte Datei wird in unser »info.txt« geschrieben:
objDateiMacher = New StreamWriter(strWinVerz & "\" & _
DATEINAME)
objDateiMacher.Write(.FileName())
objDateiMacher.Close()
objDateiMacher = Nothing
End With
Else
...
Es folgt eine Liste der wichtigsten Methoden und Eigenschaften des Steuerelements »OpenFileDialog«:
Tabelle 5.5
Der OpenFileDialog
| Methode
|
Beschreibung
|
| OpenFile
|
öffnet die Datei
|
| Reset
|
setzt auf die Standardwerte zurück
|
| ShowDialog
|
zeigt den Dialog
|
| ToString
|
liefert das vom Benutzer ausgewählte Ergebnis
|
Tabelle 5.5
Der OpenFileDialog (Forts.)
| Eigenschaft
|
Beschreibung
|
| AddExtension
|
gibt der Benutzer keine Endung ein, dann wird automatisch eine angehängt
|
| CheckFileExists
|
überprüft, ob die Datei existiert
|
| CheckPathExists
|
überprüft, ob der Pfad existiert
|
| DefaultExt
|
Standard-Erweiterung
|
| FileName
|
der vom Benutzer ausgewählte Dateiname. Er kann auch vorbelegt werden.
|
| FileNames
|
die vom Benutzer ausgewählten Dateinamen
|
| Filter
|
in »Dateityp« angezeigte »Zeichenfolge«
|
| FilterIndex
|
der vom Benutzer ausgewählte Index des Filters. Er kann auch festgelegt werden.
|
| InitialDirectory
|
das Ausgangsverzeichnis
|
| Multiselect
|
erlaubt eine Mehrfachauswahl
|
| RestoreDirectory
|
das vom Benutzer zuletzt ausgewählte Verzeichnis wird wieder hergeholt
|
| Title
|
Titelzeile
|
Abbildung 5.5
Das Formular ruft ein zweites auf.
Und die Alternative? Natürlich könnte man mit dem SaveFileDialog eine neue Datei erzeugen lassen. Da in diesem Kapitel allerdings mehrere Varianten des Speicherns und der Dateiverwaltung über VB.NET angesprochen werden sollen, wird ein solcher Dialog selbst erstellt. Es wird ein neues Formular erzeugt (frmDatei), das wie folgt aufgerufen wird:
Else
Dim frmForm As New frmDatei
frmForm = New frmDatei()
frmForm.Show()
End If
|